Câu 1: Thuật ngữ nào sau đây không phải là đặc trưng của lập trình hướng đối tượng? - Encapsulation - Abstraction - Polymorphism * Exceptions Câu 2: Đặc trưng nào sau đây được xem như là sự che dấu dữ liệu (data hiding)? - Instantiation * Encapsulation - Inheritance - Polymorphism Câu 3: Từ nào sau đây KHÔNG phải là từ khóa trong C++? - volatile - friend - this * extends Câu 4: Một lớp (class) được xem như là khung mẫu (template) của * Đối tượng (object) - Hàm (function) - Biến (variable) - Thuộc tính (attribute) Câu 5: Tính chất nào cho phép lớp kế thừa thuộc tính hoặc phương thức của lớp khác? - Nạp chồng - Lớp bạn * Thừa kế - Đa hình Câu 6: Các phương thức của cùng một lớp có cùng tên, khác số tham số và kiểu tham số được gọi là gì? * Overloading - Override - Polymorphism - Runtime Câu 7: Khi các phương thức được định nghĩa trong một lớp có thể được gọi bởi các đối tượng thuộc lớp đó. Điều này được gọi là: * Gửi thông điệp cho đối tượng - Sự đóng gói - Sự che dấu - Sự kế thừa Câu 8: Phương pháp lập trình theo lối tuần tự được gọi là phương pháp lập trình: - Hướng đối tượng - Có cấu trúc * Tuyến tính - Logic Câu 9: Trong C++, khi một đối tượng được tạo ra bởi từ khóa new sẽ được lưu ở đâu trong bộ nhớ? - cache - stack * heap - cache hoặc stack Câu 10: Lớp cơ sở trừu tượng (abstract class) có thể tạo ra bao nhiêu đối tượng? * 0 - 1 - 2 - 3 Câu 11: Ngôn ngữ nào sau đây không hỗ trợ lập trình hướng đối tượng? - C++ - C# - Java * Pascal Câu 12: Phát biểu nào sau đây là đúng về sự đóng gói? * Là cơ chế ràng buộc giữa dữ liệu và thao tác trên dữ liệu đó thành một thể thống nhất - Tất cả dữ liệu thành viên phải được khai báo protected - Tất cả dữ liệu thành viên và hàm thành viên phải được khai báo protected - Tất cả dữ liệu thành viên và hàm thành viên phải được khai báo private Câu 13: Phương pháp thiết kế trên xuống (top-down) thường được sử dụng trong phương pháp lập trình nào? - Hướng đối tượng * Có cấu trúc - Tuyến tính - Logic Câu 14: Các thành phần chung của đối tượng cung cấp một ___________ điều khiển các thành phần riêng của đối tượng. - sự kế thừa * giao diện - sự đóng gói - cây phân cấp Câu 15: Trong C++, khai báo prototype hàm nào sau đây là sai? - int Area(int a,int b); * int Area(int a=0,int b); - int Area(int a=0,int b=0); - int Area(int a,int b=0); Câu 16: Trong C++, để cấp phát bộ nhớ động ta dùng toán tử: - malloc - free - calloc * new Câu 17: Quan hệ ________ cho phép một lớp có thể truy xuất phương thức hay thuộc tính của lớp khác. - public - private * friend - protected Câu 18: Phạm vi truy xuất nào không có trong các lớp của C++? - private - protected - public * friend Câu 19: Hàm destructor trả về giá trị gì? - Một giá trị cho biết class có được hủy đúng hay không. - Một đối tượng của class - Một con trỏ trỏ đến class. * Không trả về giá trị nào cả Câu 20: Hàm mà bất kỳ lớp (class) nào cũng có là hàm gì? - Hàm xây dựng - Hàm hủy * Hàm xây dựng và hàm hủy - Không có hàm nào cả Câu 21: Khi khai báo lớp trong C++, hành vi của đối tượng được khai báo như là: - Không khai báo trong class                                                           Hàm hay phương thức - Biến hay thuộc tính * Hàm hay phương thức - Tên lớp Câu 22: Có bao nhiêu phạm vi truy xuất trong C++? - 1 - 2 * 3 - 4 Câu 23: Constructor được sử dụng để làm gì? - Hủy đối tượng - Khởi tạo đối tượng - Khởi tạo dữ liệu thành viên * Khởi tạo đối tượng và khởi tạo dữ liệu thành viên Câu 24: Hàm nào được gọi khi một đối tượng được tạo ra? - Hàm main() - Hàm bạn - Hàm hủy * Hàm khởi tạo Câu 25: Để xóa đối tượng ra khỏi bộ nhớ, hàm nào sau đây sẽ được gọi? * Hàm hủy - Hàm bạn - Hàm khởi tạo - Hàm ảo Câu 26: Từ khóa nào được sử dụng để định nghĩa một lớp trong C++? - friend * class - private - public Câu 27: Câu lệnh nào sau đây được sử dụng để lớp A khai báo lớp B là bạn của nó: - public class B; - friend class A; * friend class B; - static class B; Câu 28: _____ được xây dựng để tạo ra các đối tượng có cùng kiểu (type) * Lớp - Đối tượng - Hàm - Dữ liệu Câu 29: Hàm khởi tạo mặc định là hàm cùng tên với tên lớp và _____________. - Có 3 tham số - Có 2 tham số - Có 1 tham số * Có 0 tham số Câu 30: Để khai báo dữ liệu thành viên tĩnh, ta sử dụng từ khóa - const - define - delete * static Câu 31: Hàm thành viên tĩnh có thể truy cập đến thành phần dữ liệu được khai báo - private - public - protected * static Câu 32: Thông thường, dữ liệu thành viên của một lớp phải được khai báo - public - protected * private - static Câu 33: Một đối tượng là thể hiện của * lớp - chương trình - dữ liệu - hàm Câu 34: Giả sử ta có con trỏ p thuộc lớp P, để truy cập hàm show() của lớp P câu lệnh nào sau đây là đúng? - p->show; - p.show; * p->show(); - p.show(); Câu 35: Phát biểu nào sau đây là sai về tính đóng gói (encapsulation) trong lập trình hướng đối tượng? - Sử dụng từ khóa private để đóng gói dữ liệu - Đóng gói dữ liệu làm cho chương trình dễ bảo trì - Đóng gói dữ liệu làm cho chương trình hạn chế lỗi * Đóng gói dữ liệu làm cho chương trình ngắn gọn Câu 36: Giả sử ta có lớp Cirlce với một thuộc tính là radius (kiểu số thực). Khai báo hàm khởi tạo sao chép nào sau đây là đúng? - Circle (int r); - Circle (int); - Circle (double) * Circle (const Circle&) Câu 37: Khi ra khỏi một phạm vi (block), đối tượng thuộc phạm vi đó sẽ * Được hủy (xóa khỏi bộ nhớ) - Được khởi tạo lại - Vẫn tồn tại - Đưa vào heap Câu 38: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include usingnamespacestd; class MyClass{ private: int x; public: void Print() { cout< usingnamespacestd; class MyClass{ private: int x; public: void Print() { cout< usingnamespacestd; class MyClass{ private: int x; public: void Print() { cout< usingnamespacestd; class Test {}; void main() {Test t;} * Chương trình thực thi mà không xuất ra gì hết. - Lỗi biên dịch. - Chương trình chạy vô tận. - Lỗi thực thi. Câu 43: Phát biểu nào sau đây là SAI về hàm xây dựng? - Lớp có thể có nhiều hàm xây dựng. - Hàm xây dựng có thể được thừa kế. * Hàm có thể trả về một giá trị. - Hàm xây dựng được khai báo trong thành phần public. Câu 44: Nếu lớp Box có hàm khởi tạo là Box(int=0,int=0), để khai báo đối tượng thuộc lớp Box ta sử dụng câu lệnh: - Box(1,2,3); - Box b(1,2,3); - Box b(“box”); * Box b; Câu 45: Để một hàm có thể truy cập các thuộc tính thuộc thành phần private của lớp A thì hàm này phải là * Hàm bạn của lớp A - Hàm thành viên của lớp mà lớp A là bạn của lớp đó - Hàm tự do - Hàm thuần ảo Câu 46: Câu lệnh nào sau đây được sử dụng để khai báo và cấp phát bộ nhớ cho con trỏ thuộc lớp Line? - Line a; - Line *a; * Line *a=new Line(); - Line *a=Line(); Câu 47: Giả sử ta muốn xây dựng hàm dùng để truy cập thuộc tính gioitinh có kiểu logic của một lớp. Khai báo hàm nào sau đây là hợp lý? * bool getGioitinh() - char getGioitinh() - void getGioitinh() - int* getGioitinh() Câu 48: Từ khoá protected trong một lớp có ý nghĩa gì? * Khai báo các thành viên của lớp chỉ được thừa kế - Khai báo các thành viên của lớp sẽ được dùng chung và thừa kế - Khai báo các thành viên của lớp được dùng riêng - Khai báo các thành viên được bảo vệ Câu 49: Con trỏ this được sử dụng để tham chiếu đến: - Dữ liệu thành viên của một đối tượng - Hàm thành viên của một đối tượng * Dữ liệu thành viên và hàm thành viên của một đối tượng - Hàm khởi tạo của một đối tượng Câu 50: Giả sử lớp A là bạn của lớp B, lớp B là bạn của lớp C, phát biểu nào sau đây là SAI? - Lớp A có thể truy cập dữ liệu thành viên của lớp B - Lớp B có thể truy cập dữ liệu thành viên của lớp C * Lớp A có thể truy cập dữ liệu thành viên của lớp C - Lớp B không thể truy cập dữ liệu thành viên của lớp A Câu 51: Khi thực thi đoạn chương trình sau kết quả sẽ là: #include usingnamespacestd; classB { public: B() { }; intk; }; intmain() { B b; cout << b.k << endl; return0; } - Lỗi vì không thể truy cập thuộc tính k - Xuất ra màn hình: 1 - Xuất ra màn hình: 2 * Xuất ra màn hình số nguyên bất kỳ Câu 52: Kết quả biên dịch, thực thi chương trình sau: #include usingnamespacestd; class Point { int n; public: Point(int x) { n = x ; } void Print(){cout< usingnamespacestd; classTest { public: intx; Test() { cout <<"Test"; } }; intmain() { Test test; cout << test.x; return 0; } - Lỗi vì test chưa được khởi tạo - Lỗi vì không thể truy cập thuộc tính x * Xuất ra màn hình số nguyên bất kỳ - Lỗi vì lớp Test không có hàm khởi tạo Câu 56: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include usingnamespacestd; classA { public: intx; inty; intz; A(): x(1), y(2), z(3) { } }; intmain() { A a; cout << a.x <<" "<< a.y <<" "<< a.z; return0; } - 1 1 1 - 2 2 2 * 1 2 3 - 2 2 3 Câu 57: Khi thực thi đoạn chương trình sau kết quả sẽ là gì? #include usingnamespacestd; class Teacher { public: staticint n; public : Teacher (){ cout<<" "< using namespace std; class rect { int x, y; public: void val (int, int); int area () { return (x * y); } }; void rect::val (int a, int b) { x = a; y = b; } int main () { rect rect; rect.val (3, 4); cout << "rect area: " << rect.area(); return 0; } * rect area: 12 - rect area: 4 - rect area: 24 - rect area: 48 Câu 59: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include usingnamespacestd; classFoo { public: intx; inty; Foo() { x =10; y =10; } voidp() { intx =20;// local variable cout <<"x is "<< x <<" "; cout <<"y is "<< y << endl; } }; intmain() { Foo foo; foo.p(); return0; } - x is 10 y is 10 - x is 20 y is 20 * x is 20 y is 10 - x is 10 y is 20 Câu 60: Khi thực thi đoạn chương trình sau kết quả sẽ là gì? #include usingnamespacestd; class Employee { char ten[30];char ms[10];int tuoi; public : Employee (char te[], char m[], int tu):tuoi(tu) {          strcpy(ten, te); strcpy(ms, m); } void Display(){ cout<<"Ma so: "< using namespace std; int main() { int a; a = 5 + 3 * 5; cout << a; return 0; } - 35 * 20 - 25 - 30 Câu 64: Toán tử nào sau đây KHÔNG được phép quá tải? - + - == - ++ * :: Câu 65: Toán tử nào sau đây không được phép quá tải? - +=, ?, :: , >> - >>, <<, ?, *, sizeof() * :: , . , .* , ?: - :: , ->, * , new, delete Câu 66: Toán tử được quá tải phải được định nghĩa như: 1. Static member functions 2. Non- static member functions 3. Friend Functions - 1 - 2 - 1 và 2 * 2 và 3 Câu 67: Khai báo nào sau đây là đúng khi quá tải toán tử cộng? * operator+ - +operator - operator(+) - operator:+ Câu 68: Để quá tải toán tử += ta cần: - Quá tải toán tử + - Quá tải toán tử = - Quá tải toán tử + và = * Quá tải toán tử += Câu 69: Toán tử nào sau đây được phép quá tải? - ? - .* * != - . Câu 70: Giả sử ta có lớp Rational (phân số), định nghĩa hàm nào sau đây được sử dụng để chuyển một Rational (phân số) sang kiểu số thực? - double operator() - double operator double() - Rational operator double() * operator double() Câu 71: Giả sử ta có lớp Rational (phân số), để tái định nghĩa toán tử + ta sử dụng khai báo nào? * Rational Rational::operator+(const Rational& r) - Rational Rational::operator+() - Rational Rational::operator<+>(const Rational& r) - Rational Rational::operator(+)(const Rational& r) Câu 72: Khi thực thi đoạn chương trình sau kết quả trên màn hình sẽ là: #include using namespace std; int main() { int i, j; j = 10; i = (j++, j + 100, 999 + j); cout << i; return 0; } - 1000 - 11 * 1010 - 1001 Câu 73: Khi thực thi đoạn chương trình sau kết quả trên màn hình sẽ là: #include using namespace std; class Point { private: int x, y; public: Point() : x(0), y(0) { } Point& operator()(int dx, int dy); void show() {cout << "x = " << x << ", y = " << y; } }; Point& Point::operator()(int dx, int dy) { x = dx; y = dy; return *this; } int main() { Point pt; pt(3, 2); pt.show(); return 0; } * x = 3, y = 2 - x = 2, y = 3 - x = 2, y = 2 - Lỗi Câu 74: Toán tử nào sau đây thường được quá tải như hàm toàn cục? - Toán tử *= - Toán tử -- - Toán tử = * Toán tử << Câu 75: Toán tử nào sau đây thường được quá tải như là hàm bạn: - = , ( ) , [ ] , -> - <<, = = , [ ] , >> - ?, = , ( ) , ++ * >>, << Câu 76: Giả sử y và z là hai đối tượng thuộc lớp Data với toán tử += đã được quá tải. Câu lệnh nào sau đây tương đương với câu lệnh y + = z? - y = (y.operator+=) + (z.operator+=) * y.operator+=( z ) - y = y + z - y.operator+=( z ) = y.operator+=( z ) + z.operator+=( z ) Câu 77: Khi thực thi đoạn chương trình sau kết quả trên màn hình sẽ là: #include using namespace std; class A { int i; public: A(int ii = 0) : i(ii) {} void show() { cout << i <<" " } }; class B { int x; public: B(int xx) : x(xx) {} operator A() const { return A(x); } }; void g(A a) { a.show(); } int main() { B b(10); g(b); g(20); return 0; } - 10 20 - 20 10 - 20 20 * Lỗi Câu 78: Khi thực thi đoạn chương trình sau kết quả trên màn hình sẽ là: #include using namespace std; class Test2 { int y; }; class Test { int x; Test2 t2; public: operator Test2 () { return t2; } operator int () { return x; } }; void fun ( int x) { cout << "fun(int) called"< #include using namespace std; class Complex { private: double real; double imag; public: Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {} double mag() { return getMag(); } operator double () { return getMag(); } private: double getMag() { return sqrt(real * real + imag * imag); } }; int main() { Complex com(3.0, 4.0); cout << com.mag(); cout << com; return 0; } * 55 - 45 - 66 - 33 Câu 80: Khi thực thi đoạn chương trình sau kết quả trên màn hình sẽ là: #include using namespace std; class sample { public: sample(int i) : m_i(i) { } public: int operator()(int i = 0) const { return m_i + i; } operator int () const { return m_i; } private: int m_i; friend int g(const sample&); }; int f(char c) { return c; } int main() { sample f(2); cout << f(2); return 0; } - 3 * 4 - 5 - 6 Câu 81: Đơn thừa kế là gì? - Một lớp kế thừa từ hai lớp trở lên. * Một lớp kế thừa từ một lớp khác. - Lớp kế thừa chính nó. - Một lớp có hai lớp dẫn xuất từ nó trở lên. Câu 82: Phát biểu nào sau đây là đúng về đa thừa kế? * Một lớp kế thừa từ hai lớp trở lên - Một lớp kế thừa từ một lớp khác - Lớp kế thừa chính nó - Một lớp có hai lớp dẫn xuất từ nó trở lên Câu 83: Giả sử lớp A thừa kế từ lớp B, cả A và B đều không có hàm khởi tạo mặc định. Để gọi hàm khởi tạo mặc định của lớp B từ A ta sử dụng câu lệnh: * A(): B() { ... } - A(): { B(); ... } - B(): A() { ... } - B(): { A(); ... } Câu 84: Phát biểu nào sau đây là đúng về lớp cơ sở trừu tượng (abstract class)? - Là lớp không có lớp dẫn xuất (lớp con) - Là lớp có ít nhất một lớp dẫn xuất (lớp con) trở lên * Là lớp không thể tạo ra thể hiện của nó - Là một tên gọi khác của lớp cơ sở (base class) Câu 85: Hàm thuần ảo (pure virtual function) là hàm * Phải được định nghĩa lại ở lớp dẫn xuất (lớp con) - Không thể định nghĩa trong phạm vi public - Bắt buộc phải có khi định nghĩa lớp - Dùng để khởi tạo đối tượng Câu 86: Giả sử lớp GeometricObject thừa kế từ lớp Circle và p là con trỏ thuộc lớp GeometricObject. Để ép kiểu p sang Circle ta sử dụng câu lệnh - Circle* p1 = dynamic_cast(p); * Circle* p1 = dynamic_cast(p); - Circle p1 = dynamic_cast(p); - Circle p1 = dynamic_cast(p); Câu 87: Hàm nào sau đây là hàm thuần ảo? - virtual double getArea(); * virtual double getArea() = 0; - double getArea() = 0; - double getArea(); Câu 88: Cho đoạn mã lệnh như bên dưới, đối tượng bất kỳ thuộc lớp Y có thể truy xuất phương thức nào? class X { private: int M; void Func2(); public: X(int iM = 0); void Func1(); ~X(); }; class Y : public X { private: float F; public: Y(); Y(float iF, int iM); void Func3(); ~Y(); }; - Func1() - Func2() - Func3() * Func1() và Func3() Câu 89: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include usingnamespacestd; classB { public: ~B() { cout <<"B"; } }; classA:publicB { public: ~A() { cout <<"A"; } }; intmain() { A a; return0; } - A - B * AB - BA Câu 90: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include usingnamespacestd; classB { public: B() { cout <<"B"; } }; classA:publicB { public: A() { cout <<"A"; } }; intmain() { A a; return0; } - A - B - AB * BA Câu 91: Lỗi của đoạn chương trình sau là gì? classFruit { public: Fruit(intid) { } }; classApple:publicFruit { public: Apple() { } }; - Lớp Apple không có hàm khởi tạo có đối số - Lớp Fruit và Apple không có hàm hủy - Định nghĩa hàm khởi tạo của lớp Fruit không đúng * Định nghĩa hàm khởi tạo của lớp Apple không đúng Câu 92: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include using namespace std; class base { int arr[10]; }; class b1: public base { }; class b2: public base { }; class derived: public b1, public b2 {}; int main(void) { cout << sizeof(derived); return 0; } - 40 * 80 - 0 - 10 Câu 93: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include using namespace std; class Base { public: int fun() { cout << "Base::fun() called"; } int fun(int i) { cout << "Base::fun(int i) called"; } }; class Derived: public Base { public: int fun() { cout << "Derived::fun() called"; } }; int main() { Derived d; d.fun(5); return 0; } - Base::fun(int i) called - Derived::fun() called - Base::fun() called * Lỗi biên dịch Câu 94: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include #include usingnamespacestd; classC { public: string toString() { return"C"; } }; classB:publicC { string toString() { return"B"; } }; classA:publicB { string toString() { return"A"; } }; voiddisplayObject(C* p) { cout << p->toString(); } intmain() { A a; B b; C c;                                                                                       displayObject(&a); displayObject(&a); displayObject(&b); displayObject(&c); return0; } - ABC - CBA - AAA * CCC Câu 95: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include #include usingnamespacestd; classPerson { public: voidprintInfo() { cout << getInfo() << endl; } string getInfo() { return"Person"; } }; classStudent:publicPerson { public: string getInfo() { return"Student"; } }; intmain() { Person().printInfo(); Student().printInfo(); return 0; } * Person Person - Person Student - Student Student - Student Person Câu 96: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include #include usingnamespacestd; classA { public: string toString() { return"A"; } }; classB:publicA { public: string toString() { return"B"; } }; intmain() { B b; cout << static_cast(b).toString() << b.toString() << endl; return0; } - AA * AB - BA - BB Câu 97: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include usingnamespacestd; classA { public: A() { t(); cout <<"i from A is "<< i << endl; } voidt() { setI(20); } virtualvoidsetI(inti) { this->i =2* i; } inti; }; classB:publicA { public: B() { // cout << "i from B is " << i << endl; } virtualvoidsetI(inti) { this->i =3* i; } }; intmain() { A* p =newB(); return0; } - Hiển thị chuỗi: "i from A is 0". * Hiển thị chuỗi: "i from A is 40". - Hiển thị chuỗi: "i from A is 60". - Lỗi Câu 98: Khi thực thi đoạn chương trình sau kết quả trên màn hình sẽ là: #include using namespace std; class Base { public: Base() { cout<<"Constructor: Base"< using namespace std; class Base { public: virtual void show() { cout<<" In Base "; } }; class Derived: public Base { public: void show() { cout<<"In Derived "; } }; int main(void) { Base *bp = new Derived; bp->Base::show(); return 0; } - In Derived * In Base - In Base In Derived - Lỗi Câu 100: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include using namespace std; class A { public: virtual void fun(); }; class B { public: void fun(); }; int main() { int a = sizeof(A), b = sizeof(B); if (a == b) cout << "a == b"; else if (a > b) cout << "a > b"; else cout << "a < b"; return 0; } * a > b - a < b - a == b - Lỗi Câu 101: OOP được viết tắt từ cụm từ nào? - Object-Ordering Programs * Object-Oriented Programming - Other-Object Procedures - Object-Organized Projects Câu 102: Đối tượng (object) được xem như như thế nào của lớp (class)? * Thể hiện - Đặc trưng - Hàm thành viên - Thuộc tính Câu 103: Một đối tượng là thể hiện cụ thể của * Lớp - Biến - Hàm - Thuộc tính Câu 104: Một lớp định nghĩa lại phương thức của lớp cơ sở của nó được gọi là - Overloading * Override - Polymorphism - Runtime Câu 105: C++ cho phép đa năng hóa: - Toán tử - Hàm * Toán tử và hàm - Đối tượng Câu 106: Một trong những ưu điểm của phương pháp lập trình hướng đối tượng so với các phương pháp lập trình truyền thống là - Tất cả các đối tượng được khai báo public * Khả năng tái sử dụng lại lớp - Tất cả các đối tượng có cùng tên - Sử dụng ít bộ nhớ Câu 107: Ưu điểm nào sau đây không phải là ưu điểm của lập trình có cấu trúc? - Cấu trúc chương trình sáng sủa, rõ ràng - Dễ theo dõi, sửa lỗi - Tư duy giải thuật rõ ràng * Phù hợp với các phần mềm lớn Câu 108: Giả sử ta có prototype của 3 hàm sau: int MyAbs(int i); //(1) long MyAbs (long l); //(2) double MyAbs (double d); //(3) Để gọi hàm (2) ta sử dụng câu lệnh nào? - MyAbs(10); - MyAbs (10.2); * MyAbs (10l); - MyAbs (-10); Câu 109: Mục đích xây dựng lớp (class) trong phương pháp lập trình hướng đối tượng là: - Đóng gói dữ liệu - Sử dụng lại các lớp - Tạo cơ chế mô hình hóa các đối tượng trong thế giới thực. * Đóng gói dữ liệu, sử dụng lại các lớp, tạo cơ chế mô hình hóa các đối tượng trong thế giới thực.                                                                                 Tất cả đều đúng Câu 110: Khai báo lớp (class) nào sau đây là hợp lệ? * class A { int x; }; - public class A { } - object A { int x; }; - class A{} Câu 111: Lớp (class) chứa thành phần nào sau đây: - Dữ liệu thành viên - Hàm thành viên * Dữ liệu thành viên và hàm thành viên - Hàm tự do Câu 112: Hàm xây dựng (constructor) không có tham số được gọi là hàm xây dựng gì? * Mặc định - Sao chép - Ảo - Thuần ảo Câu 113: Để xóa đối tượng a thuộc lớp A ta sử dụng câu lệnh nào trong những câu lệnh sau đây? - destructor a; - ~A; * delete a; * delete A; Câu 114: Câu lệnh nào sau đây được sử dụng để lớp A khai báo hàm F() là bạn của nó: * friend F(); - friend function F(); - friend F; - static F; Câu 115: Khi khai báo một đối tượng thuộc một lớp đã có, hàm nào của đối tượng sẽ được gọi? * Hàm xây dựng tương ứng - Hàm hủy - Hàm xây dựng và hàm hủy - Không hàm nào được gọi Câu 116: Thành phần dữ liệu public của một lớp có thể truy cập bởi - Hàm tự do - Hàm thành viên - Hàm bạn * Hàm tự do, hàm thành viên, hàm bạn Câu 117: Khi cài đặt phương thức bên ngoài phạm vi, lớp dùng chỉ thị nào? - # - : * :: - @ Câu 118: Giả sử ta có khai báo: Car *pcar; câu lệnh nào sau đây được sử dụng để giải phóng bộ nhớ cho pcar? - pcar=delete; - pcar=delete Car[]; - delete Car; * delete[]Car; Câu 119: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include usingnamespacestd; class MyClass{ private: int x; public: void Print() { cout< usingnamespacestd; class ABC {                                                                                         int n;   public: ABC(int x){n=x; }                                                                             void Print(){ cout< usingnamespacestd; classA { public: ints; A(intnewS) { s = newS; } voidprint() { cout << s; } }; intmain() { A a; a.print(); return 0; } * Lỗi vì lớp A không có hàm khởi tạo mặc định - Chương trình không xuất kết quả lên màn hình - Xuất số nguyên ngẫu nhiên - Không xảy ra lỗi Câu 129: Khi thực thi đoạn chương trình sau kết quả sẽ là gì? #include usingnamespacestd; class AAA { int na; public : AAA(int a=0) { na = a ; } ~AAA(){cout<<" "< usingnamespacestd; classTempClass { public: inti; TempClass() { inti =5; } }; intmain() { TempClass temp(2); return 0; } - Lỗi vì lớp TempClass không có hàm khởi tạo mặc định * Lỗi vì lớp TempClass không có hàm khởi tạo có đối số là số nguyên - Lỗi vì lớp TempClass không có hàm hủy - Không xảy ra lỗi Câu 131: Toán tử nào sau đây không được phép quá tải (tái định nghĩa)? - += - > - && * ?: Câu 132: Giả sử ta có lớp Rational (phân số), để tái định nghĩa toán tử tiền tố --, chỉ thị nào sau đây là đúng? - Rational operator--(Rational& r) * Rational operator--() - Rational operator--(int dummy) - Rational operator--(int&dummy) Câu 133: Có bao nhiêu toán tử được phép quá tải trong danh sách các toán tử sau đây? '::' '[]' '->' '.*' - 1 * 2 - 3 - 4 Câu 134: Định nghĩa hai hàm thành viên của một lớp với tên giống nhau trong lập trình hướng đối tượng được gọi là: * Overloading - Overriding - Polymorphism - Inheritance Câu 135: Giả sử tồn tại lớp Data, để quá tải toán tử xuất << thì câu lệnh nào sau đây là đúng? * ostream &operator<<(ostream &output, const Data &dataToPrint) - ostream operator<<(ostream &output, const Data &dataToPrint) - ostream &operator<<(const Data &dataToPrint, ostream &output) - ostream operator<<(const Data &dataToPrint, ostream &output) Câu 136: Giả sử ta có lớp Rational (phân số), để tái định nghĩa toán tử nhập >>, chỉ thị nào sau đây cần được khai báo bên trong lớp Rational? - friend istream& operator>>(istream& stream, const Rational& rational); * friend istream& operator>>(istream& stream, Rational& rational); - friend istream operator>>(istream& stream, Rational& rational); - friend istream operator>>(istream& stream, const Rational& rational); Câu 137: Toán tử nào sau đây được mặc định quá tải bởi trình biên dịch? - Toán tử == * Toán tử = - Cả hai toán tử == và = - Cả hai toán tử == và = đều không được mặc định quá tải bởi trình biên dịch Câu 138: Hàm quá tải toán tử được gọi khi nào? - Khi khởi tạo đối tượng - Khi xóa đối tượng * Khi sử dụng toán tử - Khi đối tượng gọi hàm thành viên Câu 139: Toán tử nào sau đây phải được quá tải như hàm thành viên của lớp? - new - delete * Toán tử chuyển (ép) kiểu - Tất cả đều phải được quá tải như hàm thành viên của lớp Câu 140: Khi thực thi đoạn chương trình sau kết quả trên màn hình sẽ là: include #include #include using namespace std; class Test { int x; public: void* operator new(size_t size); void operator delete(void*); Test(int i) { x = i; cout << "Constructor called \n"; } ~Test() { cout << "Destructor called \n"; } }; void* Test::operator new(size_t size) { void *storage = malloc(size); cout << "new called \n"; return storage; } void Test::operator delete(void *p ) { cout<<"delete called \n"; free(p); } int main() { Test *m = new Test(5); delete m; return 0; } - new called Constructor called delete called Destructor called * new called Constructor called Destructor called delete called - Constructor called new called Destructor called delete called - Constructor called new called delete called Destructor called Câu 141: Phương pháp lập trình hướng đối tượng cho phép một lớp kế thừa từ lớp đã có. Đặc tính này được gọi là: - encapsulation * inheritance - abstraction - generalization Câu 142: Câu lệnh “class A: public B” có nghĩa là: - A là lớp dẫn xuất từ B - A là lớp bạn của B - B là lớp cơ sở của A * B là lớp dẫn xuất từ A Câu 143: Quá trình xây dựng một lớp mới dựa trên lớp đã có được gọi là - Structure * Inheritance - Polymorphism - Template Câu 144: Giả sử lớp Diem2D kế thừa từ lớp Diem. Để gọi hàm toString() của lớp Diem từ đối tượng d thuộc lớp Diem2D ta sử dụng câu lệnh nào trong các lệnh sau đây? - super.toString(); - d.super.toString(); - d::Diem.toString(); * d.Diem::toString(); Câu 145: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include usingnamespacestd; classParentClass { public: intid; ParentClass(intid) { this->id = id; } voidprint() { cout << id << endl; } }; classChildClass:publicParentClass { public: intid; ChildClass(intid): ParentClass(1) { this->id = id; } }; intmain() { ChildClass c(2); c.print(); return0; } - 0 * 1 - 2 - Số nguyên bất kỳ Câu 146: Khi thực thi đoạn chương trình sau kết quả trên màn hình sẽ là: #include using namespace std; class Base { public: virtual void show() = 0; }; class Derived: public Base { public: void show() { cout<<"In Derived \n"; } }; int main(void) { Derived d; Base &br = d; br.show(); return 0; } - Lỗi tại dòng: Base &br = d; - Lỗi tại dòng: br.show(); * In Derived - Không gì cả Câu 147: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include using namespace std; class P { public: void print() { cout <<" Inside P"; } }; class Q : public P { public: void print() { cout <<" Inside Q"; } }; class R: public Q { }; int main(void) { R r; r.print(); return 0; } - Inside P * Inside Q - Lỗi tại dòng: r.print(); - Lỗi tại dòng: R r; Câu 148: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include #include usingnamespacestd; classPerson { public: voidprintInfo() { cout << getInfo() << endl; } virtualstring getInfo() { return"Person"; } }; classStudent:publicPerson { public: virtualstring getInfo() { return"Student"; } }; intmain() { Person().printInfo(); Student().printInfo(); return 0; } - Person Person * Person Student - Student Student - Student Person Câu 149: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include #include usingnamespacestd; classA { public: string toString() { return"A"; } }; classB:publicA { public: string toString() { return"B"; } }; intmain() { A* b =newB(); cout << static_cast(b)->toString() << b->toString() << endl; return0; } * AA - AB - BA - BB Câu 150: Cho biết kết quả xuất hiện trên màn hình sau khi thực thi đoạn chương trình sau: #include using namespace std; class A { public: virtual void fun() { cout << "A::fun() "; } }; class B: public A { public: void fun() { cout << "B::fun() "; } }; class C: public B { public: void fun() { cout << "C::fun() "; } }; int main() { B *bp = new C; bp->fun(); return 0; } - A::fun() - B::fun() * C::fun() - Không hiện gì cả